#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from fastapi import status
from fastapi.responses import JSONResponse, Response
from typing import Union, Dict

# from core.coral import  *

def resp_200(*, data: Union[list, dict, str]) -> Response:
    return JSONResponse(
        status_code=status.HTTP_200_OK,
        content={
            'code': 200,
            'message': "Success",
            'data': data,
        }
    )


# 1.语义有误，当前请求无法被服务器理解; 
# 2. 请求参数有误。
def resp_400(*, data: Union[str, Dict] = None, message: str = "BAD REQUEST") -> Response:
    return JSONResponse(
        status_code=status.HTTP_200_OK,
        content={
            'code': 400,
            'message': message,
            'data': data,
        }
    )


# 当前请求需要身份验证。
def resp_401(*, data: str = None, message: str = "Unauthorized") -> Response:
    return JSONResponse(
        status_code=status.HTTP_200_OK,
        content={
            'code': 401,
            'message': message,
            'data': data,
        }
    )

# 请求行中指定的请求方法不能被用于请求相应的资源。该响应必须返回一个Allow 头信息用以表示出当前资源能够接受的请求方法的列表。
# 鉴于 PUT，DELETE 方法会对服务器上的资源进行写操作，因而绝大部分的网页服务器都不支持或者在默认配置下不允许上述请求方法，对于此类请求均会返回405错误。
def resp_405(*, data: str = None, message: str = "Method Not Allowed") -> Response:
    return JSONResponse(
        status_code=status.HTTP_200_OK,
        content={
            'code': 405,
            'message': message,
            'data': data,
        }
    )


# 鉴于 PUT，DELETE 方法会对服务器上的资源进行写操作，因而绝大部分的网页服务器都不支持或者在默认配置下不允许上述请求方法，对于此类请求均会返回405错误。
def resp_412(*, data: str = None, message: str = "Data is Valid") -> Response:
    return JSONResponse(
        status_code=status.HTTP_200_OK,
        content={
            'code': 405,
            'message': message,
            'data': data,
        }
    )


# 由于和被请求的资源的当前状态之间存在冲突，请求无法完成。
def resp_409(*, data: str = None, message: str = "Conflict") -> Response:
    return JSONResponse(
        status_code=status.HTTP_200_OK,
        content={
            'code': 409,
            'message': message,
            'data': data,
        }
    )


if __name__ == "__main__":
    pass
